package controlador;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Paso;
import modelo.servicio.Pasos;

public class PasoControlador extends HttpServlet {

    private String accion;
    private String usuario;
    private StringBuilder html;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        html = new StringBuilder("");
        accion = request.getParameter("ac") != null
                ? request.getParameter("ac") : "";
        usuario = request.getSession().getAttribute("sUsuario") != null
                ? request.getSession().getAttribute("sUsuario").toString() : "";
        try {
            if (accion.compareToIgnoreCase("ls") == 0) {
            } else if (accion.compareToIgnoreCase("sv") == 0) {
                String claveFlujo = request.getParameter("clv");
                String clave = request.getParameter("txt_clave");
                String descripcion = request.getParameter("txt_descripcion");
                String descripcionCorta = request.getParameter("txt_desc_corta");
                String tipoPaso = request.getParameter("rdb_tipo_paso");
                double monto = Double.parseDouble(request.getParameter("txt_monto") == null
                        || request.getParameter("txt_monto").equals("")
                        ? "0" : request.getParameter("txt_monto"));
                String finalCorrecto = request.getParameter("ckb_final_correcto") != null
                        ? request.getParameter("ckb_final_correcto") : "";
                String avisable = request.getParameter("ckb_avisable") != null
                        ? request.getParameter("ckb_avisable") : "";
                Pasos.instancia().agregar(claveFlujo, clave, descripcion,
                        descripcionCorta, avisable.equalsIgnoreCase("ON"), tipoPaso, 
                        finalCorrecto.equalsIgnoreCase("ON"), monto, usuario);
                html.append("<script type='text/javascript'>")
                        .append("charge('#ui-tabs-4', 'front?v=3&ac=1&clv=").append(claveFlujo.replace("'", "\\'")).append("');")
                        .append("</script>");
            } else if (accion.compareToIgnoreCase("ed") == 0) {
                String claveFlujo = request.getParameter("clvf");
                String clave = request.getParameter("txt_clave");
                String descripcion = request.getParameter("txt_descripcion");
                String descripcionCorta = request.getParameter("txt_desc_corta");
                String tipoPaso = request.getParameter("rdb_tipo_paso");
                double monto = Double.parseDouble(request.getParameter("txt_monto") == null
                        || request.getParameter("txt_monto").equals("")
                        ? "0" : request.getParameter("txt_monto"));
                String finalCorrecto = request.getParameter("ckb_final_correcto") != null
                        ? request.getParameter("ckb_final_correcto") : "";
                String avisable = request.getParameter("ckb_avisable") != null
                        ? request.getParameter("ckb_avisable") : "";
                Pasos.instancia().editar(claveFlujo, clave, descripcion,
                        descripcionCorta, avisable.equalsIgnoreCase("ON"), tipoPaso, 
                        finalCorrecto.equalsIgnoreCase("ON"), monto, usuario);
                html.append("<script type='text/javascript'>")
                        .append("charge('#ui-tabs-4', 'front?v=3&ac=1&clv=").append(claveFlujo.replace("'", "\\'")).append("');")
//                        .append("charge('#ui-tabs-4', 'front?v=4&ac=1&clvf=")
//                        .append(claveFlujo.replace("'", "\\'")).append("&clvp=").append(clave.replace("'", "\\'")).append("');")
                        .append("</script>");
            } else if (accion.compareToIgnoreCase("op") == 0) {
                String claveFlujo = request.getParameter("clvf");
                String idPaso = request.getParameter("p");
                List<Paso> pasos = Pasos.instancia().delFlujo(claveFlujo);
                generarOpcionesPaso(pasos, idPaso);
            } else if (accion.compareToIgnoreCase("el") == 0) {
                String claveFlujo = request.getParameter("clvf");
                String clavePaso = request.getParameter("clvp");
                
                Pasos.instancia().eliminar(claveFlujo, clavePaso, usuario);
                html.append("<script type='text/javascript'>")
                        .append("charge('#ui-tabs-4', 'front?v=3&ac=1&clv=").append(claveFlujo.replace("'", "\\'")).append("');")
                        .append("</script>");
            }
            out.println(html);
        } catch (DAOException dex) {
            out.println("Error en la base de datos: " + dex.getMessage());
        } catch (NumberFormatException ex) {
            out.println("Error al convertir el numero: " + ex.getMessage());
        } finally {
            out.close();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    private void generarOpcionesPaso(List<Paso> pasos, String idPaso) {
        html.append("<select name='cmb_paso").append(idPaso).append("'>");
        for (Paso paso : pasos) {
            html.append("<option value='").append(paso.getClave()).append("'>");
            html.append(paso.getClave()).append(" - ");
            if (!paso.getDescripcionCorta().equalsIgnoreCase("")) {
                html.append(paso.getDescripcionCorta());
            } else {
                if (paso.getDescripcion().length() > 20) {
                    html.append(paso.getDescripcion().substring(0, 20));
                } else {
                    html.append(paso.getDescripcion());
                }
            }
            html.append("</option>");
        }
        html.append("</select>");
    }
}
